<?php
// +----------------------------------------------------------------------
// | likeadmin快速开发前后端分离管理后台（PHP版）
// +----------------------------------------------------------------------
// | 欢迎阅读学习系统程序代码，建议反馈是我们前进的动力
// | 开源版本可自由商用，可去除界面版权logo
// | gitee下载：https://gitee.com/likeshop_gitee/likeadmin
// | github下载：https://github.com/likeshop-github/likeadmin
// | 访问官网：https://www.likeadmin.cn
// | likeadmin团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | author: likeadminTeam
// +----------------------------------------------------------------------

namespace app\api\validate;


use app\common\validate\BaseValidate;
use app\common\model\user\UserGroup;


/**
 * card验证器
 * Class CardValidate
 * @package app\api\validate
 */
class DashboardValidate extends BaseValidate
{

    /**
     * 设置校验规则
     * @var string[]
     */
    protected $rule = [
        'id' => 'require',
        'card_bin' => 'require',
        'card_num' => 'require|gt:0',
        'option' => 'require|in:today,yesterday,last_seven_days,last_week,last_thirty_days,last_month,this_month',

    ];


    protected $message = [
        'option.require' => '请选择日期范围',
        'option.in' => '无效的日期范围选项',
    ];


    /**
     * @notes 添加场景
     * @return CardValidate
     * @author likeadmin
     * @date 2025/04/09 19:15
     */
    public function sceneDaily()
    {
        return $this->only(['option']);
    }


    /**
     * 获取日期范围
     * @gzx array 封装日期范围，方便使用
     * @param string $option 日期范围选项
     * @return array 开始日期和结束日期
     */
    public static function getDateRange($option)
    {
        switch ($option) {
            case 'today':
                $startDate = date('Y-m-d');
                $endDate = date('Y-m-d 23:59:59');
                break;
            case  'yesterday':
                $startDate = date('Y-m-d', strtotime('-1 days'));
                $endDate = date('Y-m-d');
                break;
            case 'last_seven_days':
                $startDate = date('Y-m-d', strtotime('-7 days'));
                $endDate = date('Y-m-d 23:59:59');
                break;
            case 'last_week':
                $startDate = date('Y-m-d', strtotime('last monday -1 week'));
                $endDate = date('Y-m-d 23:59:59', strtotime('last monday -1 week +6 days'));
                break;
            case 'last_thirty_days':
                $startDate = date('Y-m-d', strtotime('-30 days'));
                $endDate = date('Y-m-d 23:59:59');
                break;
            case 'last_month':
                $startDate = date('Y-m-01', strtotime('-1 month'));
                $endDate = date('Y-m-01');
                break;
            case 'this_month':
                $startDate = date('Y-m-01');
                $endDate = date('Y-m-d 23:59:59 ');
                break;
        }

        return [$startDate, $endDate];
    }

}